import json  # 导入JSON处理模块，用于读写JSON格式数据
import os  # 导入操作系统模块，用于文件和目录操作


class StorageManager:
    """处理数据存储管理的类"""

    # 数据文件路径常量
    CHECKINS_FILE_PATH = "data/checkin_logs.json"  # 打卡记录文件路径
    GOALS_FILE_PATH = "data/goals.json"  # 学习目标文件路径

    # 预设心情列表及其对应的表情图标
    PRESET_MOODS = ["开心", "平静", "兴奋", "疲惫", "难过", "其他"]
    MOOD_ICONS = ["😊", "😌", "🥳", "😴", "😢", "🤔"]

    def load_all_checkins_from_file(self):
        """从文件加载所有打卡记录"""
        try:
            # 确保数据目录存在，不存在则创建（exist_ok=True表示存在时不报错）
            os.makedirs(os.path.dirname(self.CHECKINS_FILE_PATH), exist_ok=True)

            # 检查文件是否存在，不存在则返回空列表
            if not os.path.exists(self.CHECKINS_FILE_PATH):
                return []

            # 打开文件并读取JSON数据，自动解析为Python列表
            with open(self.CHECKINS_FILE_PATH, 'r', encoding='utf-8') as file:
                return json.load(file)

        # 捕获所有异常并打印错误信息，保证程序不会崩溃
        except Exception as e:
            print(f"加载打卡记录出错: {e}")
            return []  # 出错时返回空列表

    def save_checkin_to_file(self, checkin):
        """保存打卡记录到文件"""
        try:
            # 确保数据目录存在
            os.makedirs(os.path.dirname(self.CHECKINS_FILE_PATH), exist_ok=True)

            # 初始化打卡记录列表
            checkins = []

            # 如果文件存在，读取现有记录
            if os.path.exists(self.CHECKINS_FILE_PATH):
                with open(self.CHECKINS_FILE_PATH, 'r', encoding='utf-8') as file:
                    checkins = json.load(file)

            # 将新记录添加到列表末尾
            checkins.append(checkin)

            # 将更新后的列表写回文件（ensure_ascii=False确保中文正常显示，indent=2美化格式）
            with open(self.CHECKINS_FILE_PATH, 'w', encoding='utf-8') as file:
                json.dump(checkins, file, ensure_ascii=False, indent=2)

        except Exception as e:
            print(f"保存打卡记录出错: {e}")

    def save_all_checkins_to_file(self, checkins):
        """保存所有打卡记录到文件（覆盖现有内容）"""
        try:
            # 确保数据目录存在
            os.makedirs(os.path.dirname(self.CHECKINS_FILE_PATH), exist_ok=True)

            # 直接将传入的打卡记录列表写入文件（覆盖模式）
            with open(self.CHECKINS_FILE_PATH, 'w', encoding='utf-8') as file:
                json.dump(checkins, file, ensure_ascii=False, indent=2)

        except Exception as e:
            print(f"保存所有打卡记录出错: {e}")

    def load_goals_from_file(self):
        """从文件加载学习目标"""
        try:
            # 确保目标文件所在目录存在
            os.makedirs(os.path.dirname(self.GOALS_FILE_PATH), exist_ok=True)

            # 文件不存在则返回空列表
            if not os.path.exists(self.GOALS_FILE_PATH):
                return []

            # 读取并解析目标文件
            with open(self.GOALS_FILE_PATH, 'r', encoding='utf-8') as file:
                return json.load(file)

        except Exception as e:
            print(f"加载学习目标出错: {e}")
            return []

    def save_goals_to_file(self, goals):
        """保存学习目标到文件"""
        try:
            # 确保目录存在
            os.makedirs(os.path.dirname(self.GOALS_FILE_PATH), exist_ok=True)

            # 将目标列表写入文件
            with open(self.GOALS_FILE_PATH, 'w', encoding='utf-8') as file:
                json.dump(goals, file, ensure_ascii=False, indent=2)

        except Exception as e:
            print(f"保存学习目标出错: {e}")